//可被混入的类，是一种特殊的类：
mixin Parent1 {
  late int n1;        //混入类中可以有普通属性

  f1(){
    print('111');     //混入类中可以有普通方法
  }

  f11();              //混入类中可以有抽象方法

  f3(){
    print('Parent1.f3');
  }
} 

mixin Parent2 {
  late int n2;        //混入类中可以有普通属性

  f2(){
    print('222');     //混入类中可以有普通方法
  }

  f22();              //混入类中可以有抽象方法

  f3(){
    print('Parent2.f3');
  }
} 

//为了突破“单继承”限制，Dart允许一个类“混入”多个可被混入的父类
class Child with Parent1,Parent2 {      //同时混入多个父类时，后面的父类提供的方法可能覆盖前面父类的方法
  @override
  f11() {
    print('11111111');
  }

  @override
  f22() {
    print('222222222');
  }
}

main(){
  Parent1 c1 = Child();
  c1.f1();
  c1.f11();
  c1.f3();        //Parent2.f3()

  Parent2 c2 = Child();
  c2.f2();
  c2.f22();
  c2.f3();        //Parent2.f3()

  Child c3 = Child();
  c3.f1();
  c3.f11();
  c3.f2();
  c3.f22();
  c3.f3();        //Parent2.f3()
}